/***************************************************************************
创建者：华磊
 开始时间：               : 2020.1１.01
 copyright            : (C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   程序运行视窗
*                                                                         *
 ***************************************************************************/
#ifndef RUNVIEW_H
#define RUNVIEW_H

#include <QDialog>
#include "runview_global.h"
#include "setlinedialog.h"
#include <QStringListModel>
#include <QStringList>
#include <QTableWidgetItem>
#include <QListWidgetItem>
#include <QTranslator>

//默认当前tableView的大小为10个
#define RUNVIEW_TABLE_SIZE 10

/**
 * @brief The RunProgramInformation struct程序运行相关信息结构体
 */
struct RunProgramInformation
{
//    /**
//     * @brief runRelatedFile运行相关文件<关联文件名，文件内容>
//     */
//    QMap<QString, QStringList> runRelatedFile;
//    /**
//     * @brief runningFile正在运行文件<正在运行文件名，运行行号>
//     */
//    QMap<QString, QPair<int,QStringList> > runningFile;

//    /**
//     * @brief runningFileTable文件运行窗体<正在运行文件名，窗体指针>
//     */
//    QMap<QString, QTableWidget *> runningFileTable;//?此处指针有无问题

    /**
     * @brief runingFileName            运行程序文件名
     */
    QVector<QString > runingFileName;

    /**
     * @brief runingFileLine            运行文件行数
     */
    QVector<int > runingFileLine;

    /**
     * @brief runingFileCode            程序文件指令字符串列表
     */
    QVector<QStringList > runingFileCode;

    /**
     * @brief runRelatedFileName        运行关联文件名列表
     */
    QVector<QString> runRelatedFileName;
};

namespace Ui {
class RunView;
}

/**
 * @brief The RunView class　运行视窗类
 */
class RUNVIEWSHARED_EXPORT RunView : public QDialog
{
    Q_OBJECT

public:
    explicit RunView(int styleId,QWidget *parent = 0);
    ~RunView();

    SetLineDialog *setLineDialog;

    /**
     * @brief updateViewShow    更新数据到界面控件上
     */
    void updateViewShow();

    /**
     * @brief currentSelectRow  当前选中行号
     */
    int currentSelectRow;

    /**
     * @brief currentSelectTab  当前选中tab
     */
    int currentSelectTab;

    /**
     * @brief strList                   头部内容
     */
    QStringList strList;

    void changeLanguage(int language);
    void updateRobotPictureShow(std::string imageStringIn);

    void initialDisplayStyle(int styleId);

private:
    QPixmap  stringTopixmap( const QString& pic );
    void showRunningLine(int tableIndex,int lineIndex);

private:
    QTranslator translator;

signals:
    /**
     * @brief clearCurrentProductivitySignal        清除当前产量信号函数
     */
    void clearCurrentProductivitySignal();

    /**
     * @brief clearAccumulateProductivitySignal     清除累计产量信号函数
     */
    void clearAccumulateProductivitySignal();

    /**
     * @brief forcePutDownMaterialSignal            强制放料信号函数
     */
    void forcePutDownMaterialSignal();

    /**
     * @brief forceFetchMaterialSignal              强制取料信号函数
     */
    void forceFetchMaterialSignal();

    /**
     * @brief setCurrentSelectRow       点击当前选中行:delegate会获取行号,和P点值
     */
    void setCurrentSelectRow();

private slots:
//    /**
//     * @brief on_takeOFButton_fetch_clicked     强制取料按钮槽函数
//     */
//    void on_takeOFButton_fetch_clicked();

//    /**
//     * @brief on_takeOFButton_putdown_clicked   强制放料槽函数
//     */
//    void on_takeOFButton_putdown_clicked();

    /**
     * @brief on_pushbt_clearCurrent_clicked    清除当前产量槽函数
     */
    void on_pushbt_clearCurrent_clicked();

//    /**
//     * @brief on_pushbt_clearAll_clicked        清除累计产量槽函数
//     */
//    void on_pushbt_clearAll_clicked();

    /**
     * @brief newTableWidget_doubleClicked   自行添加
     * @param index
     */
    //void newTableWidget_doubleClicked(const QModelIndex &index);
    /**
     * @brief newTableWidget_clicked         自行添加 单击 获取行号
     * @param index
     */
    void newTableWidget_clicked(const QModelIndex &index);

    /**
     * @brief newTableWidget_doubleClicked      双击选中行
     * @param index                             选中行索引
     */
    void newTableWidget_doubleClicked(const QModelIndex &index);

    /**
     * @brief on_runFileTabWidget_currentChanged    tab
     * @param index
     */
    void on_runFileTabWidget_currentChanged(int index);

public:
    /**
     * @brief currentProductivity               当前产量值
     */
    int currentProductivity;

    /**
     * @brief accumclateProductivity            累计产量值
     */
    int accumulateProductivity;

    /**
     * @brief runEfficiency                     程序运行效率值
     */
    float runEfficiency;

    /**
     * @brief The RunProgramInformation struct  程序运行相关信息(当前运行的)
     */
    RunProgramInformation runProInfo;
    //************************************可用于存储翻译内容,快速提取,减少文件读操作
    //************************************读过的都可以获取
    /**
     * @brief cacheFileCode                     用于临时缓存用(所有出现过的,都会在这里获得)(快速提取用)
     */
    QMap<QString, QStringList> cacheFileCode;
    /**
     * @brief cacheMainFileCode                 用于临时缓存用(主程序的)(快速提取用)
     */
    QStringList cacheMainFileCode;

    /**
     * @brief robotPicture                      机器人图片地址
     */
<<<<<<< HEAD
    QString robotPicture;//控制器传递过来时完整路径，华磊已经修复显示问题，２０１８．１１．２５
=======
    QString robotPicture;//控制器传递过来时图片文件名，华磊已经修复显示问题
>>>>>>> dev
    QString tmpPicAddress;//缓存图片地址


    /**
     * @brief runFileUpdateFlag     更新允许控制
     */
    bool runFileUpdateFlag;

public:
    QStringListModel *model;//指针申请转移至此

    QTableWidget *newTableWidget;
    QVector<QTableWidget *> vectorTableWidget;//改进 容器方式
    QVector<int> lastRunningLineId;
    //******************2020.12.10 处理界刷新导致界面崩溃问题 /
    //1.防止多次重新新建指针对象,会造成内存溢出等问题,程序容易崩溃
    //2.容器有限制,目前申明实例为 RUNVIEW_TABLE_SIZE 个 具体情况具体分析
    //************************************************/

//    /**
//     * @brief tmpFileName           缓存文件名(10)
//     */
//    QVector<QString> tmpFileName;
//    /**
//     * @brief tmpFileLine           缓存行(10)
//     */
//    QVector<int> tmpFileLine;
    //2017.04.12 替代
    /**
     * @brief The RunProgramInformation struct  缓存程序运行相关信息(显示用,判断显示是否需要刷新)
     */
    RunProgramInformation tmpRunProInfo;
    /**
     * @brief tmpFileSize           缓存文件数量
     */
    int tmpFileSize;
private:
    Ui::RunView *ui;


};

#endif // RUNVIEW_H
